import { RuleResponse, StringOrNull } from "@/Types/Types";
import { Validator } from "./Validator";

/**
 * 利用正则表达式验证字符串
 *
 * @param expression 指定的最小长度
 * @param err 验证失败时输出的字符串
 *
 * @exmaple
 * FixedLengthValidator(10) // 验证错误时会输出 `输入长度必须为10`
 */
export const RegularExpressionValidator = function(
  expression: string,
  err = `输入数据不符合规则[${expression}]`
): Validator<StringOrNull> {
  return function(input: StringOrNull): RuleResponse {
    const regex = new RegExp(expression);
    if (input != null && !regex.test(input!)) {
      return err;
    }
    return true;
  };
};
